package com.ia.sd;

import java.util.Stack;

public class pila {

    Stack miPila;

    public pila() {
        miPila = new Stack();
    }

    public boolean vacia() {
        return miPila.empty();
    }

    public void apilar(nodo n) {
        miPila.push(new nodo(n));
    }
    
    // ordenado por coste
    public void apilarOrdenado(nodo n) {
        if (!this.vacia()) {
            nodo aux = this.desapilar();
            if (aux.getCoste() < n.getCoste()) {
                this.apilar(n);
                miPila.push(aux);
            } else {
                miPila.push(aux);
                miPila.push(new nodo(n));
            }
        } else miPila.push(new nodo(n));
    }

    public nodo desapilar() {
        return ((nodo) miPila.pop());
    }
    
    public nodo esta(nodo n) {
        nodo respuesta = null;
        Stack auxP = new Stack();
        nodo auxN;
        while ((!this.vacia()) && (respuesta == null)) {
            auxN = this.desapilar();
            if (auxN.igual(n)) respuesta = auxN;
            auxP.add(auxN);
        }
        while (!auxP.empty()) this.apilar((nodo) auxP.pop());
        return respuesta;
    }
    
    public void intercambiarDatos(nodo n) {
        boolean parar = false;
        Stack auxP = new Stack();
        nodo auxN;
        while ((!this.vacia()) && (!parar)) {
            auxN = this.desapilar();
            if (auxN.igual(n)) parar = true;
            auxN.setCoste(n.getCoste());
            int[] p = n.getPuntero();
            auxN.setPuntero(p[0], p[1]);
            auxP.add(auxN);
        }
        while (!auxP.empty()) this.apilar((nodo) auxP.pop());
    }
    
}
